/*
 * terminales-clientes.c
 *
 *  Created on: 09/09/2011
 *      Author: guido
 */

#include "terminales-client.h"
#include "fabrica-mensajes.h"

bool TerminalesClient::seguirProcesando() {
	return (!this->input.eof());
}

TerminalesClient::~TerminalesClient() {
	input.close();
	output.close();
	delete[] buffer;
}

void TerminalesClient::operator>>(Canal& canal) {
	int tamanyo = 0;
	this->mensajeConsulta->serializar(buffer, tamanyo);
	delete (mensajeConsulta);
	canal.recibirMensaje(buffer, tamanyo);
	delete[] buffer; buffer = 0;
}

void TerminalesClient::operator<<(Canal& canal) {
	canal.enviarMensaje(buffer);
	FabricaMensajes fabrica;
	this->mensajeRespuesta = fabrica.getInstanciaRespuesta(buffer[0]);
	this->mensajeRespuesta->deserializar(buffer);
	std::string temp = mensajeRespuesta->obtenerSalida();
	output << temp << std::endl;
	delete (this->mensajeRespuesta);
	delete[] buffer; buffer = 0;
}

bool TerminalesClient::leerQuery() {
	std::string temp;
	std::getline(input, temp);
	bool resultado = false;
	if (input.good()) {
		FabricaMensajes fabrica;
		if (!temp.empty()) {
			this->mensajeConsulta = fabrica.getInstanciaConsulta(temp.at(0));
			mensajeConsulta->deserializar(temp);
		}
		resultado = true;
	}
	return resultado;
}

bool TerminalesClient::entradaValida() {
	return (input.good());
}

bool TerminalesClient::salidaValida() {
	return (output.good());
}
